.. include:: content/title.txt .. include:: content/terms.txt .. include:: content/theory.txt .. include:: content/syntax.txt .. include:: content/examples.txt .. include:: content/tasks.txt Tkinter. Позиционирование элементов ####################################### Метод place() ======================================= Метод place() позволяет более точно настроить параметры позиционирования. Он принимает следующие параметры: * height и width: устанавливают соответственно высоту и ширину элемента в пикселях * relheight и relwidth: также задают соответственно высоту и ширину элемента, но в качестве значения используется число float в промежутке между 0.0 и 1.0, которое указывает на долю от высоты и ширины родительского контейнера * x и y: устанавливают смещение элемента по горизонтали и вертикали в пикселях соответственно относительно верхнего левого угла контейнера * relx и rely: также задают смещение элемента по горизонтали и вертикали, но в качестве значения используется число float в промежутке между 0.0 и 1.0, которое указывает на долю от высоты и ширины родительского контейнера * bordermode: задает формат границы элемента. Может принимать значение INSIDE (по умолчанию) и OUTSIDE * anchor: устанавливает опции растяжения элемента. Может принимать значения n, e, s, w, ne, nw, se, sw, c, которые являются сокращениями от Noth(север - вверх), South (юг - низ), East (восток - правая сторона), West (запад - левая сторона) и Center (по центру). Например, значение nw указывает на верхний левый угол Например, разместим кнопку с шириной 130 пикселей и высотой 30 пикселей в центре окна:: from tkinter import * clicks = 0 def click_button(): global clicks clicks += 1 btn.config(text="Clicks {}".format(clicks)) root = Tk() root.title("GUI на Python") root.geometry("300x250") btn = Button(text="Clicks 0", background="#555", foreground="#ccc", padx="20", pady="8", font="16", command=click_button) btn.place(relx=.5, rely=.5, anchor="c", height=30, width=130, bordermode=OUTSIDE) root.mainloop() Результат выполнения: .. image:: img/01_place.png :alt: скриншот Следует заметить, что при использовании метода place() не надо использовать метод pack(), чтобы сделать элемент видимым. Или разместим три кнопки:: from tkinter import * root = Tk() root.title("GUI на Python") root.geometry("300x250") btn1 = Button(text="x=10, y=20", background="#555", foreground="#ccc", padx="14", pady="7", font="13") btn1.place(x=10, y=20) btn2 = Button(text="x=50, y=100", background="#555", foreground="#ccc", padx="14", pady="7", font="13") btn2.place(x=50, y=100) btn3 = Button(text="x=140, y=160", background="#555", foreground="#ccc", padx="14", pady="7", font="13") btn3.place(x=140, y=160) root.mainloop() Результат выполнения: .. image:: img/02_place.png :alt: скриншот Метод grid() ======================================= Метод grid применяет другой подход к позиционированию элементов, нежели метод place, позволяя поместить элемент в определенную ячейку условной сетки или грида. Метод grid применяет следующие параметры: * column: номер столбца, отсчет начинается с нуля * row: номер строки, отсчет начинается с нуля * columnspan: сколько столбцов должен занимать элемент * rowspan: сколько строк должен занимать элемент * ipadx и ipady: отступы по горизонтали и вертикали соответственно от границ элемента до его текста * padx и pady: отступы по горизонтали и вертикали соответственно от границ ячейки грида до границ элемента * sticky: выравнивание элемента в ячейке, если ячейка больше элемента. Может принимать значения n, e, s, w, ne, nw, se, sw, которые указывают соответствующее направление выравнивания Начальный пример демонстрации позиционирования с помощью сетки: .. code-block:: python from tkinter import * window = Tk() window.title("Welcome to grid app!") window.geometry('350x200') lbl = Label(window, text="Hello!") btn = Button(window, text="Click Me!") lbl.grid(column=0, row=0) btn.grid(column=1, row=0) window.mainloop() Результат выполнения: .. image:: img/01_grid.png :alt: скриншот Использу следующий пример можно понять как расположить элементы на сетке вида шахматной доски: .. code-block:: python from tkinter import * window = Tk() window.title("Welcome to grid app!") lbl = Label(window, text="Hello!") btn1 = Button(window, text="Click Me!") btn2 = Button(window, text="Click Me!") btn3 = Button(window, text="Click Me!") btn1.grid(column=0, row=0) lbl.grid(column=1, row=0) btn2.grid(column=2, row=0) btn3.grid(column=1, row=1) window.mainloop() Результат выполнения: .. image:: img/02_grid.png :alt: скриншот Пример окна для ввода логина и пароля: .. code-block:: python from tkinter import * root = Tk() root.title("Welcome to the second entry app") lbl_login = Label(root, text="Login") lbl_pass = Label(root, text="Password") txt1 = Entry(root, width=10) txt2 = Entry(root, width=10) btn = Button(root, text="Enter") lbl_login.grid(row=0, sticky=E) lbl_pass.grid(row=1, sticky=E) txt1.grid(row=0, column=1) txt2.grid(row=1, column=1) btn.grid(columnspan=2, sticky=NSEW) root.mainloop() Результат выполнения: .. image:: img/03_grid.png :alt: скриншот